package com.blog.cmrpersonalblog.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.blog.cmrpersonalblog.dto.sensitiveword.requset.SensitiveWordBatchRequest;
import com.blog.cmrpersonalblog.dto.sensitiveword.requset.SensitiveWordCreateRequest;
import com.blog.cmrpersonalblog.dto.sensitiveword.requset.SensitiveWordQueryRequest;
import com.blog.cmrpersonalblog.dto.sensitiveword.respnose.SensitiveWordResponse;
import org.springframework.web.multipart.MultipartFile;

import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 敏感词管理服务接口
 */
public interface SensitiveWordManagementService {

    /**
     * 分页查询敏感词列表
     * @param query 查询条件
     * @return 敏感词分页列表
     */
    IPage<SensitiveWordResponse> getSensitiveWordPage(SensitiveWordQueryRequest query);

    /**
     * 根据ID获取敏感词详情
     * @param id 敏感词ID
     * @return 敏感词详情
     */
    SensitiveWordResponse getSensitiveWordById(Long id);

    /**
     * 创建敏感词
     * @param request 创建请求
     * @return 创建结果
     */
    Long createSensitiveWord(SensitiveWordCreateRequest request);

    /**
     * 更新敏感词
     * @param id 敏感词ID
     * @param request 更新请求
     * @return 更新结果
     */
    Boolean updateSensitiveWord(Long id, SensitiveWordCreateRequest request);

    /**
     * 删除敏感词
     * @param id 敏感词ID
     * @return 删除结果
     */
    Boolean deleteSensitiveWord(Long id);

    /**
     * 批量创建敏感词
     * @param request 批量创建请求
     * @return 创建结果
     */
    Map<String, Object> batchCreateSensitiveWords(SensitiveWordBatchRequest request);

    /**
     * 批量更新敏感词状态
     * @param ids 敏感词ID列表
     * @param status 状态
     * @return 更新结果
     */
    Boolean batchUpdateStatus(List<Long> ids, Integer status);

    /**
     * 批量删除敏感词
     * @param ids 敏感词ID列表
     * @return 删除结果
     */
    Boolean batchDeleteSensitiveWords(List<Long> ids);

    /**
     * 导入敏感词库
     * @param file 导入文件
     * @param type 敏感词类型
     * @param severity 严重程度
     * @param filterMode 过滤模式
     * @param overwrite 是否覆盖已存在的敏感词
     * @return 导入结果
     */
    Map<String, Object> importSensitiveWords(MultipartFile file, String type, Integer severity,
                                           String filterMode, Boolean overwrite);

    /**
     * 导出敏感词库
     * @param query 查询条件
     * @param response HTTP响应
     */
    void exportSensitiveWords(SensitiveWordQueryRequest query, HttpServletResponse response);

    /**
     * 获取敏感词统计信息
     * @return 统计信息
     */
    Map<String, Object> getSensitiveWordStatistics();

    /**
     * 获取敏感词类型分布
     * @return 类型分布
     */
    Map<String, Long> getTypeDistribution();

    /**
     * 获取敏感词严重程度分布
     * @return 严重程度分布
     */
    Map<String, Long> getSeverityDistribution();

    /**
     * 获取敏感词过滤模式分布
     * @return 过滤模式分布
     */
    Map<String, Long> getFilterModeDistribution();

    /**
     * 获取热门敏感词
     * @param limit 限制数量
     * @return 热门敏感词列表
     */
    List<SensitiveWordResponse> getPopularWords(Integer limit);

    /**
     * 刷新敏感词缓存
     * @return 刷新结果
     */
    Boolean refreshSensitiveWordCache();

    /**
     * 清理过期的匹配统计
     * @param days 保留天数
     * @return 清理结果
     */
    Integer cleanExpiredStats(Integer days);

    /**
     * 测试敏感词过滤
     * @param content 测试内容
     * @return 过滤结果
     */
    Map<String, Object> testSensitiveWordFilter(String content);
}